<!--This test should be updated each time new functionality is added to SimpleTest-->
<!DOCTYPE HTML>
<html>
<head>
  <title>Profiling test suite for SimpleTest</title>
  <script type="text/javascript">
  var start = new Date();
  </script>
  <script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
  <script type="text/javascript">
  var loadTime = new Date();
  </script>
</head>
<body>
<input id="textB"/>
<script class="testbody" type="text/javascript">
info("Profile::SimpleTestLoadTime: " + (loadTime - start));
var startTime = new Date();
SimpleTest.waitForExplicitFinish();
function starttest() {
  SimpleTest.waitForFocus(
    function() {
      //test log
      info("Logging some info")
    
      //basic usage
      ok(true, "test ok", "This should be true");
      is(0, 0, "is() test failed");
      isnot(0, 1, "isnot() test failed");
    
      //todo tests
      todo(false, "test todo", "todo() test should not pass");
      todo_is(false, true, "test todo_is");
      todo_isnot(true, true, "test todo_isnot");
    
      //misc
      SimpleTest.requestLongerTimeout(1);
    
      //note: this test may alter runtimes as it waits
      var check = false;
      $('textB').focus();
      SimpleTest.waitForClipboard("a",
        function () {
          SpecialPowers.clipboardCopyString("a");
        },
        function () {
          check = true;
        },
        function () {
          check = false;
        }
      );
      is(check, true, "waitForClipboard should work");
    
      //use helper functions
      var div1 = createEl('div', {'id': 'somediv', 'display': 'block'}, "I am a div");
      document.body.appendChild(div1);
      var divObj = this.getElement('somediv');
      is(divObj, div1, 'createEl did not create element as expected');
      is($('somediv'), divObj, '$ helper did not get element as expected');
      is(computedStyle(divObj, 'display'), 'block', 'computedStyle did not get right display value');
      document.body.removeChild(div1);
    
      /* note: expectChildProcessCrash is not being tested here, as it causes wildly variable
       * run times. It is currently being tested in: 
       *  dom/plugins/test/test_hanging.html and dom/plugins/test/test_crashing.html
       */

      //note: this also adds a short wait period
      SimpleTest.executeSoon(
        function () {
          //finish() calls a slew of SimpleTest functions
          SimpleTest.finish();
          //call this after finish so we can make sure it works and doesn't hang our process
          var endTime = new Date();
          info("Profile::SimpleTestRunTime: " + (endTime-startTime));
          //expect and throw exception here. Otherwise, any code that follows the throw call will never be executed
          SimpleTest.expectUncaughtException();
          //make sure we catch this error
          throw "i am an uncaught exception"
        }
      );
    }
  );
};
//use addLoadEvent
addLoadEvent(
  function() {
    starttest();
  }
);
</script>
</body>
</html>
